/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author marcel
 */
public class InteiroPositivo {
    private int x;

    //item a
    public void setValor(int valor){
        if (valor >= 0)
            this.x = valor;
    }

    public int getValor() {
        return this.x;
    }

    //item b
    public int multiplica(InteiroPositivo outro){
        return this.getValor() * outro.getValor();
        //return this.x * outro.getValor();
    }

    //item c  - alterado para atender os itens h) e i) que necessitam de cálculo de fatorial
    public long fatorial() {
        return this.fatorial(this.x);
    }

    private long fatorial(int valor) {
        long resultado = 1;
        for (int c = valor; c > 1; c--){
            resultado *= c; // resultado = resultado * c;
        }
        return resultado;
    }

    //item d
    public String fibonacci() {
        if (this.x ==0)
            return "";

        String str = "1";
        int soma;
        int num = 1;
        int ant = 0;
        for (int i=2; i<=this.x;i++){
            soma = num + ant;
            ant = num;
            num = soma;
            str = str + ", "+ soma;
            
        }
        return str;
    }

    // item e
    public String divisoresInteiros() {
        String str = "";
        int qtd = 0;

        for (int d=1; d <= this.x/2; d++){
            if (this.x % d == 0){  // se não há resto na divisão
                str += d+", ";
                qtd++;
            }
        }
        str += this.x+", quantidade = "+(qtd+1);
        return str;
    }

    // item g
    public double valorI() {
        double i = 0;

        for (int n=1, d=this.x; n <= this.x; n++, d--){
            i = i + n/(double)d; // cuidar com a operação em razão da tipagem forte do Java
        }

        return i;
    }

    // item h
    public double valorS() {
        double soma = 0;
        for (int exp=20,denom=1; denom<21; exp--,denom++){
            soma += Math.pow(this.getValor(),exp)/this.fatorial(denom);
        }
        return soma;
    }

}
